// 实例化nwe路由
const router = require('koa-router')()
// 统一给前端返回的josn方式
const result = require('../jian-config/body-result.js')
const qiao = require('qiao-weixin') // 获取小程序码
// 数据库操作的接口
const { getToken, addurl, chaxun_refer, Updateurl, subscribe,program } = require('../jian-config/shuojuku-database.js') // addurl 数据库插入记录链接
// 校监前端数据传过来的时候是否验证合格
const { shopinfor, catecheck, putoncheck } = require('../jian-config/xiaoyan-charm.js')
// 验证token的合法性
const { Decryption } = require('../jian-config/jiami-token.js')
// 图片上传
const { upload, cosfun } = require('../tengxunyun-cos/multer-cos.js')
// 时间戳
const moment = require('moment/moment.js')


// 菜品类目信息上传（菜的种类）
router.post('/menucategory', new Decryption().m, async ctx => {
    // 时间戳生成菜单分类cid // 拼接字符串 a
    let cid = 'a' + new Date().getTime()
    const { category } = ctx.request.body
    // 校验填写是否为空
    new catecheck(ctx, category).start()
    // 查询数据库数据是否已经存在的类目
    const query = `db.collection('dishes-category').where({label:'${category}'}).get()`
    const cate = `db.collection('dishes-category').add({data:{value:'${category}',label:'${category}',cid:'${cid}',count:0,addProducts:0}})`
    try {
        let res = await new getToken().database(chaxun_refer, query)
        if (res.data.length > 0) {
            // 该类目已经存在
            new result(ctx, '该类目已经存在', 202)
        } else {
            // 该类目已经不存在  进行添加
            await new getToken().database(addurl, cate)
            new result(ctx, '添加成功')
        }
    } catch (error) {
        new result(error, '添加失败，服务器发生错误', 500)
    }

})


// 菜品类目信息获取（菜的种类）
router.get('/dishesacquire', new Decryption().m, async ctx => {
    // get 路径携带前端传来的分页数  ctx.query:获取get路径携带的值
    // 关于分页：小程序：20条，node.js：10条，云函数：100条
    let { page } = ctx.query
    let sk = page * 10
    // orderBy('cid','desc') 对字段排序 1.cid排序的字段 2.只能取 asc 或 desc
    const query = `db.collection('dishes-category').orderBy('cid','desc').limit(10).skip(${sk}).get()`
    try {
        let res = await new getToken().database(chaxun_refer, query)
        let data = res.data.map(item => { return JSON.parse(item) }) // 遍历数据
        let tatal = { Total: res.pager.Total } // 获取数据库总共多少条数据的个数
        let array = { ...{ result: data }, ...tatal } // 数组和数量返回
        new result(ctx, '请求成功', 200, array)
    } catch (error) {
        new result(error, '请求失败，服务器发生错误', 500)
    }
})



// 菜品单位上传
router.post('/uploadingunit', new Decryption().m, async ctx => {
    let unid = new Date().getTime()
    const { unit } = ctx.request.body
    // 校验填写是否为空
    new catecheck(ctx, unit).start()
    // 查询数据库数据是否已经存在的类目
    const query = `db.collection('dishunit-danwei').where({label:'${unit}'}).get()`
    const cate = `db.collection('dishunit-danwei').add({data:{value:'${unit}',label:'${unit}',unid:'${unid}'}})`
    try {
        let res = await new getToken().database(chaxun_refer, query)
        if (res.data.length > 0) {
            // 该类目已经存在
            new result(ctx, '该类目已经存在', 202)
        } else {
            // 该类目已经不存在  进行添加
            await new getToken().database(addurl, cate)
            new result(ctx, '添加成功')
        }
    } catch (error) {
        new result(error, '添加失败，服务器发生错误', 500)
    }

})


// 菜品单位获取
router.get('/acquireunit',new Decryption().m,  async ctx => {
    // get 路径携带前端传来的分页数  ctx.query:获取get路径携带的值
    // 关于分页：小程序：20条，node.js：10条，云函数：100条
    let { page } = ctx.query
    let sk = page * 10
    // orderBy('cid','desc') 对字段排序 1.cid排序的字段 2.只能取 asc 或 desc
    const query = `db.collection('dishunit-danwei').orderBy('cid','desc').limit(10).skip(${sk}).get()`
    try {
        let res = await new getToken().database(chaxun_refer, query)
        let data = res.data.map(item => { return JSON.parse(item) }) // 遍历数据
        let tatal = { Total: res.pager.Total } // 获取数据库总共多少条数据的个数
        let array = { ...{ result: data }, ...tatal } // 数组和数量返回
        new result(ctx, '请求成功', 200, array)
    } catch (error) {
        new result(error, '请求失败，服务器发生错误', 500)
    }
})


// 添加上架菜品
router.post('/uploaddishes', new Decryption().m, async ctx => {
    const { _id, category, name, unitprice, unit, image, cid } = ctx.request.body
    // 校验
    new putoncheck(ctx, category, name, unitprice, unit, image, cid).start()
    // 当前时间 ---
    let time = moment().utcOffset(8).format('YYY-MM-DD HH:mm:ss')
    // 查询数据库数据是否已经存在的类目
    const query = `db.collection('dishes-data').add({data:
        {
            category:'${category}',name:'${name}',unitprice:${unitprice},unit:'${unit}',image:${image},quantity:0,onsale:true,cid:'${cid}',time:'${time}',monthlysale:0
        }
        })`
    // 对当前类目下的count字段自增
    const count = `db.collection('dishes-category').where({cid:'${cid}'}).update({data:{count:db.command.inc(1)}})`
    try {
        await new getToken().database(addurl, query)
        await new getToken().database(Updateurl, count)
        new result(ctx, '提交成功')
    } catch (error) {
        new result(error, '提交失败，服务器发生错误', 500)
    }

})


// 获取上架菜品
router.get('/obtaindishes', new Decryption().m, async ctx => {
    // get 路径携带前端传来的分页数  ctx.query:获取get路径携带的值
    // 关于分页：小程序：20条，node.js：10条，云函数：100条
    let { page } = ctx.query
    let sk = page * 10
    // orderBy('cid','desc') 对字段排序 1.cid排序的字段 2.只能取 asc 或 desc
    const query = `db.collection('dishes-data').orderBy('cid','desc').limit(10).skip(${sk}).get()`
    try {
        let res = await new getToken().database(chaxun_refer, query)
        let data = res.data.map(item => { return JSON.parse(item) }) // 遍历数据
        let tatal = { Total: res.pager.Total } // 获取数据库总共多少条数据的个数
        let array = { ...{ result: data }, ...tatal } // 数组和数量返回
        new result(ctx, '请求成功', 200, array)
    } catch (error) {
        new result(error, '请求失败，服务器发生错误', 500)
    }
})

// 获取小程序码
router.get('/program', new Decryption().m, async ctx => {
    let { scene } = ctx.query
    try {
        const token = await new getToken().get_token()
        qiao.mpCodeFile(2, token, { page: 'pages/home-page/page', check_path: false, env_version: 'develop', scene }, 'c:/test2.png');

    } catch (error) {
        new result(error, '请求失败，服务器发生错误', 500)
    }
})


// 订单管理页面
 
// 获取菜单
router.post('/obtainorder',new Decryption().m, async ctx=>{
   let {page, transac_status } = ctx.request.body // transac_status 结帐状态: 未接单: 'false'接单: 'true'
   let sk = page * 10
   let param = {}
   if (transac_status != '') { 
    param['transac_status'] = transac_status
   }else {
    delete param.transac_status
   }
   let OBJ = JSON.stringify(param)
      const query = `db.collection('dingdan-order').where(${OBJ}).orderBy('order_time','desc').field({menu:false}).limit(10).skip('${sk}').get()`
   try {
    let res = await new getToken().database(chaxun_refer,query)
    let data = res.data.map(item=>{return JSON.parse(item)})
    const tatal = {tatal:res.pager.Total}
    const array = {...{result:data},...tatal}
    new result(ctx, '请求成功', 200, array)
   } catch (error) {
    new result(error, '服务器发生错误', 500)
   }
})

// 订单详情

// 查看详细菜单
router.get('/vieworder', new Decryption().m, async ctx=>{
	let {id} = ctx.query 
	let query = `db.collection('dingdan-order').doc('${id}').field({menu:true}).get()`
	try{
		let res = await new getToken().database(chaxun_refer, query)
		let data = res.data.map(item=>{return JSON.parse(item)})
		new result(ctx, '请求成功', 200, data)
	}catch(e){
        new result(error, '服务器发生错误', 500)
	}
})

// 接单
router.get('/receiving',new Decryption().m, async ctx=>{
	let {id} = ctx.query
    console.log(id,'id');
	const query = `db.collection('dingdan-order').doc('${id}').update({data:{order_receiving:'true'}})`
	try{
		await new getToken().database(Updateurl,query)
        new result(ctx, '已接单,快上菜吧', 200)
	}catch(e){
		new result(error, '服务器发生错误', 500)
	}
})

// 结账以及订阅消息
// 订阅消息小程序端用户允许几次商家可以发送几次消息
router.post('/checkout', new Decryption().m, async ctx=>{
    let {id,openid,sett_amount,order_no } = ctx.request.body  // order_no 订单编号
	// let newmoney = Price(Number(sett_amount))    // 补零 
	// 订阅消息字段组合 
	let time = moment().utcOffset(8).format('YYYY-MM-DD HH:mm:ss')
	let subsc = {'phrase2':{'value':'已结账'},'date3':{'value':time},'thing1':{'value':'你的支付金额为:'+ sett_amount}}
    console.log(subsc,'subsc');
	const query = `db.collection('dingdan-order').doc('${id}').update({data:{transac_status:'true'}})`
    console.log(subsc,'subsc');
	try{
		await new getToken().subscribe(openid, subsc)
		await new getToken().database(Updateurl,query)
        new result(ctx, '已接单,快上菜吧', 200)
	}catch(e){
		new result(error, '服务器发生错误', 500)
	}
})









module.exports = router.routes()
